From: Owen W. Taylor Date: Sat, 8 May 2010 16:08:31 +0000 (-0400) Subject: Do something reasonable for width-for-height sizing X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10121 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=75b52d36f2c74464ba8e6784c5dba2399516e228;p=gnome-shell.git Do something reasonable for width-for-height sizing The StTable code only supports height-for-width. When called in width-for-height sizing mode, instead of treating the -1 flag value of 'for_width' as a real width, and requesting all the children at 1 pixel wide, use the natural width of the table as the width for determing the height. Since we can't rewrap in width-for-height mode, we then report the natural width also as the minimum width of the table. https://bugzilla.gnome.org/show_bug.cgi?id=618104 --- diff --git a/src/st/st-table.c b/src/st/st-table.c index 194907739..27f4eae02 100644 --- a/src/st/st-table.c +++ b/src/st/st-table.c @@ -870,6 +870,14 @@ st_table_get_preferred_width (ClutterActor *self, total_pref_width += pref_widths[i]; } + /* If we were requested width-for-height, then we reported minimum/natural + * heights based on our natural width. If we were allocated less than our + * natural width, then we need more height. So in the width-for-height + * case we need to disable shrinking. + */ + if (for_height >= 0) + total_min_width = total_pref_width; + if (min_width_p) *min_width_p = total_min_width; if (natural_width_p) @@ -892,6 +900,17 @@ st_table_get_preferred_height (ClutterActor *self, gint i; gint *min_widths; + /* We only support height-for-width allocation. So if we are called + * width-for-height, calculate heights based on our natural width + */ + if (for_width < 0) + { + float natural_width; + + clutter_actor_get_preferred_width (self, -1, NULL, &natural_width); + for_width = natural_width; + } + if (priv->n_rows < 1) { *min_height_p = 0;